package hot100;

import java.util.ArrayList;
import java.util.List;

public class spiralOrder2 {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ret = new ArrayList<>();
        if(matrix.length == 0) {
            return ret;
        }
        //记录上下左右四个边界
        int b = matrix.length - 1;
        int r = matrix[0].length - 1;
        int l = 0;
        int t = 0;
        while(true) {
            //从左到右,l->r
            for(int i = l;i <= r;i++) {
                ret.add(matrix[t][i]);
            }
            t++;
            if(t > b) {
                break;
            }
            //从上到下,t -> b
            for(int i = t;i <= b;i++) {
                ret.add(matrix[i][r]);
            }
            r--;
            if(r < l) {
                break;
            }
            //从右到左,r->l
            for(int i = r;i >= l;i--) {
                ret.add(matrix[b][i]);
            }
            b--;
            if(b < t) {
                break;
            }
            //从下到上
            for(int i = b;i >= t;i--) {
                ret.add(matrix[i][l]);
            }
            l++;
            if(l > r) {
                break;
            }
        }
        return ret;

    }
}
